import { createApp } from 'vue'

import Cookies from 'js-cookie'

import ElementPlus from 'element-plus'
import locale from 'element-plus/lib/locale/lang/zh-cn' // 中文语言

import '@/assets/styles/index.scss' // global css
import '@/assets/icons/iconfont.css'
import App from './App'
import store from './store'
import router from './router'
// 自定义指令
import directive from './directive' // directive

// 注册指令
import plugins from './plugins'
import { download } from '@/utils/request'

// svg图标
import 'virtual:svg-icons-register'
import SvgIcon from '@/components/SvgIcon'
import elementIcons from '@/components/SvgIcon/svgicon'

// 打印
import print from 'vue3-print-nb'

import './permission' // permission control

import { useDict } from '@/utils/dict'
import { getConfigKey, updateConfigByKey } from '@/api/system/config'
import { parseTime, resetForm, addDateRange, handleTree, selectDictLabel, selectDictLabels } from '@/utils/ruoyi'
import { getAccount } from '@/utils/auth' // 用户登录的账号
import { getNickName } from '@/utils/auth' // 用户登录的昵称
import { format_with_array, strToFixed } from '@/utils/index.js'
import { kilobit_table } from '@/utils/formattKilobit'
import { empty_table } from '@/utils/formattEmpty'
import mitt from 'mitt' // mitt任意组件通信


import WlOrderPrint from '@/components/WlOrderPrint'
// 分页组件
import Pagination from '@/components/Pagination'
// 自定义表格工具组件
import RightToolbar from '@/components/RightToolbar'
// 富文本组件
import Editor from '@/components/Editor'
// 文件上传组件
import FileUpload from '@/components/FileUpload'
// 图片上传组件
import ImageUpload from '@/components/ImageUpload'
// 图片预览组件
import ImagePreview from '@/components/ImagePreview'
// 自定义树选择组件
import TreeSelect from '@/components/TreeSelect'
// 字典标签组件
import DictTag from '@/components/DictTag'
// 表格筛选组件
import TableFilter from '@/components/TableFilter'

import VXETable from 'vxe-table'
import 'vxe-table/lib/style.css'
import VxeUI from 'vxe-pc-ui'
import 'vxe-pc-ui/lib/style.css'
import UserDefineTable from '@/components/order/userDefineTable.vue'


const app = createApp(App)

// 全局方法挂载
app.config.globalProperties.useDict = useDict
app.config.globalProperties.getConfigKey = getConfigKey
app.config.globalProperties.download = download
app.config.globalProperties.parseTime = parseTime
app.config.globalProperties.resetForm = resetForm
app.config.globalProperties.handleTree = handleTree
app.config.globalProperties.addDateRange = addDateRange
app.config.globalProperties.selectDictLabel = selectDictLabel
app.config.globalProperties.selectDictLabels = selectDictLabels
app.config.globalProperties.getAccount = getAccount
app.config.globalProperties.getNickName = getNickName
app.config.globalProperties.kilobit_table = kilobit_table
app.config.globalProperties.empty_table = empty_table
app.config.globalProperties.format_with_array = format_with_array
app.config.globalProperties.strToFixed = strToFixed
app.config.globalProperties.EventBus = mitt()

// 全局组件挂载



app.component('WlOrderPrint', WlOrderPrint)
app.component('DictTag', DictTag)
app.component('Pagination', Pagination)
app.component('TreeSelect', TreeSelect)
app.component('FileUpload', FileUpload)
app.component('ImageUpload', ImageUpload)
app.component('ImagePreview', ImagePreview)
app.component('RightToolbar', RightToolbar)
app.component('UserDefineTable', UserDefineTable)
app.component('Editor', Editor)
app.component('TableFilter', TableFilter)
app.use(router)
app.use(store)
app.use(plugins)
app.use(elementIcons)
app.use(VxeUI)
app.use(VXETable)
app.use(print)
app.component('svg-icon', SvgIcon)

directive(app)

// 使用element-plus 并且设置全局的大小
app.use(ElementPlus, {
	locale: locale,
	// 支持 large、default、small
	size: Cookies.get('size') || 'default'
})

app.mount('#app')
